home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / sbin / update-default-ispell < prev    next >
Text File  |  2009-05-15  |  7KB  |  213 lines

  1. #!/usr/bin/perl -w
  2.  
  3. use Debian::DictionariesCommon q(:all);
  4. use Debconf::Client::ConfModule q(:all);
  5. use Getopt::Long;
  6.  
  7. dico_checkroot ();
  8.  
  9. my $rebuild = '';
  10. my $ignoresymlinks = '';
  11.  
  12. GetOptions ('rebuild'         => \$rebuild,
  13.         'ignore-symlinks' => \$ignoresymlinks);
  14.  
  15. version ('2.0');
  16.  
  17. my $class     = "ispell";
  18. my $libdir    = "/usr/lib/ispell";
  19. my $question  = "dictionaries-common/default-$class";
  20. my $iquestion = "dictionaries-common/invalid_debconf_value";
  21. my $linkdir   = "/etc/dictionaries-common";
  22. my $manual    = '';
  23. my $program   = "update-default-$class";
  24. my $debug     = 1 if exists $ENV{'DICT_COMMON_DEBUG'};
  25. my $newflag   = "/var/cache/dictionaries-common/flag-$class-new";
  26. # -- Ispell only stuff
  27. my $emacsen_default      = "nil";
  28. my $cache_dir            = "/var/cache/dictionaries-common";
  29. my $emacsen_default_file = "$cache_dir/emacsen-ispell-default.el";
  30. my $ispell_dicts_list    = "$cache_dir/ispell-dicts-list.txt";
  31. # -- End of ispell only stuff
  32.  
  33. # This flag is intended for remove-default-$class. If we are here we do not
  34. # need it any longer, so we reset for future apt runs by cleaning it.
  35. if ( -f $newflag ){
  36.   print STDERR "$program: Removing $newflag\n" if $debug;
  37.   unlink $newflag
  38.     or print STDERR " $program: Warning: could not remove $newflag\n";
  39. }
  40.  
  41. ($ret, $value)  = get ($question);
  42.  
  43. if ($ret == 0 && $value ){
  44.   updatedb ($class);
  45.   my $dictionaries = loaddb ($class);
  46.  
  47.   # Set value to Manual if no elements are present for given class
  48.   unless ( %$dictionaries ) {
  49.     print STDERR "$program: No $class elements installed. Manual forced\n" if $debug;
  50.     $value = "Manual forced (No $class elements installed)";
  51.     set($question,$value);
  52.     go();
  53.   }
  54.  
  55.   # Check if we are in manual mode
  56.   if ( $value =~ m/^Manual.*/i ){
  57.     $ignoresymlinks = "yes";
  58.     $manual         = "yes";
  59.   }
  60.  
  61.   if ( not $ignoresymlinks ) {
  62.  
  63.     # Handle invalid debconf values
  64.     if ( not exists $dictionaries->{$value} ){
  65.       my @available_keys = ();
  66.       foreach ( split (/\s*,\s*/, metaget ($question, "choices")) ){
  67.     # strip leading/trailing whitespace and create a list of available keys
  68.     s/^\s+//;
  69.     s/\s+$//;
  70.     push (@available_keys,$_) if ( exists $dictionaries->{$_} );
  71.       }
  72.       my $choices    = join (', ', sort {lc $a cmp lc $b} @available_keys);
  73.       my $forced_key = $available_keys[0] ||
  74.     die "Selected ispell dictionary:\n" .
  75.     " $value \n" .
  76.     "does not correspond to any installed package in the system\n" .
  77.     "and no alternative ispell dictionary could be selected.\n";
  78.       subst($iquestion,"value",$value);
  79.       fset ($iquestion,"seen","false");
  80.       input("high",$iquestion);                # Warn about what happened
  81.       subst ($question, "choices", $choices);  # Put sane values in debconf choices field
  82.       subst ($question, "echoices", $choices); # Put sane values in debconf echoices field
  83.       set ($question, $forced_key);            # Set debconf value to a sane one
  84.       fset ($question,"seen","false");
  85.       input ("critical", $question);
  86.       title ("dictionaries-common: ispell dictionaries");
  87.       go ();
  88.       ($ret, $value) = get ($question);
  89.       die "\n Could not get a valid value for debconf question:\n" .
  90.     "$question\n"
  91.     if ( $ret != 0 ); # This should never be reached
  92.     }
  93.  
  94.     # Check if links are possible and complain otherwise
  95.     if ( exists $dictionaries->{$value}{"hash-name"} ){
  96.       my $hash   = "$libdir/" . $dictionaries->{$value}{"hash-name"};
  97.       foreach my $i (".hash", ".aff") {
  98.     if (-e "$hash$i") {
  99.       system "ln -fs $hash$i $linkdir/default$i";
  100.     } else {
  101.       die "
  102. When trying to make the default link to a ispell dictionary
  103. the file to link [$hash$i] was not found. Please report this as a bug to the
  104. maintainer of the ispell dictionary package you tried to
  105. select.
  106. In the meantime select other default value for your ispell dictionary.\n";
  107.     }
  108.       }
  109.     } else {
  110.       die "Selected ispell dictionary:\n" .
  111.     " $value \n" .
  112.     "does not contain a hash name entry in the database.\n";
  113.     }
  114.   }
  115.  
  116. # This here is only for ispell, not wordlist
  117.   setsysdefault ($value);
  118.  
  119.   # Printing a plain list with installed ispell dictionaries,
  120.   open (IDICTS,"> $ispell_dicts_list") ||
  121.     die "Could not open $ispell_dicts_list for writing\n";
  122.   foreach ( sort keys %{$dictionaries} ){
  123.     print IDICTS "$_\n";
  124.   }
  125.   close (IDICTS);
  126.  
  127.   # Write ispell default dict for emacsen
  128.   unless ( $manual ){
  129.     if ( exists $dictionaries->{$value}{"emacs-display"}
  130.      and lc($dictionaries->{$value}{"emacs-display"}) eq "no" ){
  131.       $emacsen_default = "nil";
  132.     } elsif ( exists $dictionaries->{$value}{"emacsen-name"} ){
  133.       $emacsen_default = "\"" . $dictionaries->{$value}{"emacsen-name"} . "\"";
  134.     } elsif( exists $dictionaries->{$value}{"hash-name"} ){
  135.       $emacsen_default = "\"" . $dictionaries->{$value}{"hash-name"} . "\"";
  136.     }
  137.   }
  138.   #
  139. }
  140.  
  141. # Printing the default ispell dictionary under emacs
  142. open (EMISDEFAULT,"> $emacsen_default_file");
  143. print EMISDEFAULT ";; File automatically generated by update-default-ispell
  144. ;;
  145. ;; Do not manually edit!! Use select-default-ispell script instead
  146.  
  147. (set-variable \'debian-ispell-dictionary $emacsen_default)\n";
  148. close EMISDEFAULT;
  149.  
  150.  
  151. if ($rebuild) {
  152.  
  153.   updatedb ($class);
  154.  
  155.   # Ispell emacsen + jed support
  156.   build_emacsen_support ();
  157.   build_jed_support ();
  158.   build_squirrelmail_support ();
  159.   system ("ispell-autobuildhash") == 0
  160.       or die "Error running ispell-autobuildhash\n";
  161.   # End of specific ispell support 
  162. }
  163.  
  164. # Local Variables:
  165. #  perl-indent-level: 2
  166. # End:
  167.  
  168. __END__
  169.  
  170. =head1 NAME
  171.  
  172. update-default-ispell - update default ispell dictionary
  173.  
  174. =head1 SYNOPSIS
  175.  
  176.  update-default-ispell [--rebuild] [--ignore-symlinks]
  177.  
  178. =head1 DESCRIPTION
  179.  
  180. WARNING: Not to be used from the command line unless you know very well what you are doing.
  181.  
  182. This program is intended to be called from package postinst
  183. (with B<--rebuild>), from B<select-default-ispell> or
  184. from dictionaries-common
  185. postinst (with B<--ignore-symlinks>).
  186.  
  187. Reads the system default from the debconf database and set default links in
  188. F</etc/dictionaries-common> pointing to the appropriate files in
  189. F</usr/lib/ispell/>.  Also
  190. updates the system-wide setting F</etc/dictionaries-common/ispell-default>.
  191. If option B<--rebuild> is given, rebuilds the
  192. F</var/cache/dictionaries-common/ispell.db> 
  193. and the emacsen, jed, and SquirrelMail support (to be put in
  194. F</var/cache/dictionaries-common/>) from the files in
  195. F</var/lib/dictionaries-common/ispell>
  196.  
  197.  
  198. =head1 OPTIONS
  199.  
  200. --rebuild          Rebuild database, emacsen and jed stuff
  201. --ignore-symlinks  Do not set symlinks
  202.  
  203.  
  204. =head1 SEE ALSO
  205.  
  206. The dictionaries-common policy document
  207.  
  208. =head1 AUTHORS
  209.  
  210. Rafael Laboissiere
  211.  
  212. =cut
  213.